🐳 什么是 Dockerfile?
Dockerfile 是一个文本文件,包含了一系列指令,用于自动构建 Docker 镜像。每条指令定义了镜像构建过程中的一个步骤,比如选择基础镜像、安装依赖、复制文件、设置环境变量等。
📄 Dockerfile 的常见指令
指令 | 作用说明 |
---|---|
FROM |
指定基础镜像,例如 ubuntu 、node 、python 等 |
RUN |
执行命令,比如安装软件包 |
COPY |
将本地文件复制到镜像中 |
WORKDIR |
设置工作目录 |
CMD |
容器启动时执行的默认命令 |
ENTRYPOINT |
设置容器启动时的主命令,可与 CMD 配合使用 |
ENV |
设置环境变量 |
EXPOSE |
声明容器监听的端口(仅声明,不实际开放) |
🧪 示例:Python 应用的 Dockerfile
# 使用官方 Python 镜像作为基础
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 设置环境变量(可选)
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 启动应用
CMD ["python", "app.py"]
🚀 构建和运行镜像
# 构建镜像(假设 Dockerfile 在当前目录)
docker build -t my-python-app .
# 运行容器
docker run -p 8000:8000 my-python-app
🎯 小贴士
- Dockerfile 文件名默认是
Dockerfile
,无需扩展名。 - 每次修改 Dockerfile 后都需要重新构建镜像。
- 可以通过
.dockerignore
文件排除不必要的文件(类似.gitignore
)。
🧱 Dockerfile vs Docker:核心区别
项目 | Dockerfile | Docker |
---|---|---|
类型 | 文件(脚本) | 工具 / 平台 |
作用 | 定义如何构建一个 Docker 镜像 | 用于构建、运行、管理容器 |
内容 | 包含构建镜像的指令(如 FROM、RUN 等) | 包含命令行工具和服务(如 docker build ) |
使用方式 | 被 Docker 工具读取并执行 | 通过命令行或 API 操作容器和镜像 |
举例 | Dockerfile 是一个文本文件 |
docker build 、docker run 是命令 |
📄 Dockerfile 是什么?
- 是一个 构建镜像的说明文件。
- 类似于“食谱”,告诉 Docker 如何一步步制作一个镜像。
- 你写好 Dockerfile 后,用
docker build
命令来生成镜像。
🧠 举个例子:
Dockerfile
FROM node:18
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]
🐳 Docker 是什么?
是一个完整的 容器平台,包括:
- 构建镜像(
docker build
) - 运行容器(
docker run
) - 管理镜像和容器(
docker ps
、docker images
等)
- 构建镜像(
- 它读取 Dockerfile 来构建镜像,然后运行这些镜像作为容器。
🧠 举个例子:
docker build -t my-app .
docker run -p 3000:3000 my-app
🎯 总结一句话
Dockerfile 是说明书,Docker 是执行者。
Docker 读懂 Dockerfile,帮你构建镜像、运行容器,实现应用的快速部署和隔离。
Docker 的几个核心组成部分:镜像(Image)、容器(Container)、网络(Network) 和 数据卷(Volume)
🧊1. 镜像(Image)
- 镜像是一个只读的模板,包含运行应用所需的所有内容:代码、依赖、环境变量等。
- 由 Dockerfile 构建而来。
- 类似于“快照”或“应用安装包”。
🧠 示例:
docker build -t my-app .
docker images # 查看本地镜像
📦 2. 容器(Container)
- 容器是镜像的运行实例,是一个隔离的环境。
- 可以启动、停止、删除、重启。
- 容器之间互不干扰,适合部署微服务。
🧠 示例:
docker run -d -p 8080:80 my-app
docker ps # 查看正在运行的容器
docker stop <容器ID>
🌐 3. 网络(Network)
- Docker 提供虚拟网络,让容器之间可以通信。
- 默认有 bridge 网络,也可以创建自定义网络。
- 非常适合多容器架构,比如 Web + 数据库。
🧠 示例:
docker network create my-network
docker run --network my-network --name web my-web-image
docker run --network my-network --name db my-db-image
📁 4. 数据卷(Volume)
- 用于持久化数据,避免容器删除后数据丢失。
- 可以挂载到容器的某个目录。
- 非常适合数据库、日志等场景。
🧠 示例:
docker volume create my-data
docker run -v my-data:/data my-db-image
🧠 总结:Docker 的四大支柱
组件 | 作用说明 |
---|---|
镜像 | 应用的模板 |
容器 | 镜像的运行实例 |
网络 | 容器之间的通信桥梁 |
数据卷 | 容器外部的持久化存储 |